package com.wlt.controller;

import com.wlt.pojo.Address;
import com.wlt.pojo.Area;
import com.wlt.pojo.City;
import com.wlt.pojo.Province;
import com.wlt.result.BaseResult;
import com.wlt.service.AddressService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 收货地址
 */
@RestController
@RequestMapping("/user/address")
public class AddressController {
    @DubboReference
    private AddressService addressService;
    
    /**
     * 查询所有省份
     * @return  所有省份集合
     */
    @GetMapping("/findAllProvince")
    public BaseResult<List<Province>> findAllProvince(){
        return BaseResult.success(addressService.findAllProvince());
    }
    
    /**
     * 查询某省份的所有城市
     * @param provinceId    省份id
     * @return              查询城市集合
     */
    @GetMapping("/findAllCity")
    public BaseResult<List<City>> findAllCity(Long provinceId){
        return BaseResult.success(addressService.findCityByProvince(provinceId));
    }
    
    /**
     * 查询城市的所有区县
     * @param cityId    城市id
     * @return          区县集合
     */
    @GetMapping("/findAllArea")
    public BaseResult<List<Area>> findAllArea(Long cityId){
        return BaseResult.success(addressService.findAreaByCity(cityId));
    }
    
    /**
     * 新增地址
     * @param userId    用户id
     * @param address   地址
     * @return          新增结果
     */
    @PostMapping("/add")
    public BaseResult addAddress(@RequestHeader Long userId, @RequestBody Address address){
        address.setUserId(userId);
        addressService.add(address);
        
        return BaseResult.success();
    }
    
    /**
     * 更新
     * @param userId    用户id
     * @param address   地址
     * @return          更新结果
     */
    @PutMapping("/update")
    public BaseResult update(@RequestHeader Long userId, @RequestBody Address address){
        address.setUserId(userId);
        addressService.update(address);
        return BaseResult.success();
    }
    
    /**
     * 根据id查询地址
     * @param id    id
     * @return      查询结果
     */
    @GetMapping("/findById")
    public BaseResult<Address> findById (Long id) {
        return BaseResult.success(addressService.findById(id));
    }
    
    /**
     * 根据id删除地址
     * @param id    id
     * @return      删除结果
     */
    @DeleteMapping("/delete")
    public BaseResult delete(Long id){
        addressService.delete(id);
        
        return BaseResult.success();
    }
    
    /**
     * 查询用户的所有地址
     * @param userId    用户id
     * @return          查询结果集合
     */
    @GetMapping("/findByUser")
    public BaseResult<List<Address>> findByUsers (@RequestHeader Long userId) {
        return BaseResult.success(addressService.findByUser(userId));
    }
}
